Rank, Dense Rank, এবং Row Number এর ব্যবহার

Hive এর জন্য Advanced Query Techniques - হাইভ (Hive) - Big Data and Analytics

377

Hive-এ Rank, Dense Rank, এবং Row Number ফাংশনগুলো সাধারণত Window Functions হিসেবে ব্যবহৃত হয়, যা ডেটাকে বিভিন্ন ক্রমে সাজানোর এবং সেগুলোর ওপর ভিত্তি করে র‍্যাঙ্কিং বা সনাক্তকরণ করতে সাহায্য করে। এই ফাংশনগুলো ব্যবহার করে আপনি ডেটার উপর বিভিন্ন প্রকার অর্ডারিং ও সেগমেন্টেশন করতে পারেন।

এই ফাংশনগুলো বিশেষ করে Analytics বা Reporting কুয়েরির ক্ষেত্রে গুরুত্বপূর্ণ, যেখানে ডেটা শ্রেণীবদ্ধ করা হয় বা বিভিন্ন পর্যায়ে ভাগ করা হয়। নিচে, আমরা Rank, Dense Rank, এবং Row Number ফাংশনের ব্যবহার এবং পার্থক্যগুলো নিয়ে আলোচনা করবো।

১. Rank() Function


Rank() ফাংশনটি ডেটাকে নির্দিষ্ট ক্রম অনুযায়ী সাজিয়ে প্রতিটি রেকর্ডের জন্য একটি র‍্যাঙ্ক প্রদান করে। তবে, Rank() এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল যে, যদি কোনো দুটি বা তার বেশি রেকর্ডের একই মান থাকে, তাদের জন্য একই র‍্যাঙ্ক বরাদ্দ করা হয় এবং পরবর্তী র‍্যাঙ্কগুলি প্রপোরশনালি বৃদ্ধি পায়।

ব্যবহার:

SELECT 
    id, 
    name, 
    salary, 
    RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;

এখানে, RANK() ফাংশনটি salary কলামের মান অনুযায়ী ডেটা সাজিয়ে rank প্রদান করবে। যদি দুটি কর্মচারীর salary সমান হয়, তাহলে তাদের উভয়কে একই র‍্যাঙ্ক দেওয়া হবে, এবং পরবর্তী র‍্যাঙ্কটি সেই অনুযায়ী গুণিত হবে।

উদাহরণ:

  • কর্মচারী A এবং B যদি একই স্যালারি পান, তবে তাদের র‍্যাঙ্ক হবে ১, এবং পরবর্তী কর্মচারীর র‍্যাঙ্ক হবে ৩।

২. Dense Rank() Function


Dense Rank() ফাংশনটি Rank() এর মতো কাজ করে, তবে এতে কিছুটা পার্থক্য আছে। Dense Rank() একই মানের জন্য র‍্যাঙ্ক প্রদানে কোনো ফাঁকা জায়গা রাখে না। অর্থাৎ, যদি দুটি রেকর্ড একই মান ধারণ করে, তবে তাদের জন্য একই র‍্যাঙ্ক দেওয়া হবে, কিন্তু পরবর্তী র‍্যাঙ্কটি একটু ঘনিষ্ঠ হবে।

ব্যবহার:

SELECT 
    id, 
    name, 
    salary, 
    DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;

এখানে, DENSE_RANK() ফাংশনটি salary কলামের মান অনুযায়ী ডেটাকে সাজিয়ে dense_rank প্রদান করবে।

উদাহরণ:

  • কর্মচারী A এবং B যদি একই স্যালারি পান, তবে তাদের র‍্যাঙ্ক হবে ১, এবং পরবর্তী কর্মচারীর র‍্যাঙ্ক হবে ২ (এটি Rank() ফাংশনের থেকে আলাদা, যেখানে পরবর্তী র‍্যাঙ্ক ৩ হবে)।

৩. Row Number() Function


Row Number() ফাংশনটি প্রতিটি রেকর্ডকে একটি অনন্য সনাক্তকারী নম্বর প্রদান করে, যা নির্দিষ্ট অর্ডারিং অনুসারে সাজানো হয়। এখানে কোনো র‍্যাঙ্কিং কনসেপ্ট নেই, শুধু প্রতিটি রেকর্ডকে একটি একক ইউনিক নম্বর দেওয়া হয়।

ব্যবহার:

SELECT 
    id, 
    name, 
    salary, 
    ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_number
FROM employees;

এখানে, ROW_NUMBER() ফাংশনটি salary কলামের মান অনুযায়ী ডেটাকে সাজিয়ে row_number প্রদান করবে।

উদাহরণ:

  • কর্মচারী A, B এবং C যদি একই স্যালারি পান, তবে তাদের র‍্যাঙ্ক হবে ১, ২ এবং ৩।

পার্থক্য: Rank(), Dense Rank(), এবং Row Number()


ফাংশনব্যাখ্যাফলে ফলাফল
Rank()একাধিক রেকর্ডের জন্য একক র‍্যাঙ্ক বরাদ্দ করা হয়, কিন্তু পরবর্তী র‍্যাঙ্কটি গ্যাপসহ হয়।যদি দুটি রেকর্ডে একই মান থাকে, তাদের র‍্যাঙ্ক হবে একি এবং পরবর্তী র‍্যাঙ্ক হবে গ্যাপসহ।
Dense Rank()একাধিক রেকর্ডের জন্য একক র‍্যাঙ্ক বরাদ্দ করা হয়, কিন্তু পরবর্তী র‍্যাঙ্কটি গ্যাপ ছাড়া হয়।একই মানের জন্য একি র‍্যাঙ্ক এবং পরবর্তী র‍্যাঙ্ক হবে ধারাবাহিকভাবে।
Row Number()প্রতিটি রেকর্ডকে একটি অনন্য সংখ্যা দেওয়া হয়, যেখানে কোনো র‍্যাঙ্কিং নেই।প্রতিটি রেকর্ডের জন্য একটি ইউনিক নম্বর দেওয়া হয়।

ব্যবহারিক উদাহরণ


ধরা যাক, আমাদের একটি employees টেবিল রয়েছে যেখানে কর্মচারীদের id, name, এবং salary রয়েছে। আমরা চাই, স্যালারি অনুযায়ী কর্মচারীদের র‍্যাঙ্কিং বা নম্বর প্রদান করতে।

INNER JOIN এবং Rank() ব্যবহার

SELECT 
    a.id, 
    a.name, 
    a.salary, 
    RANK() OVER (ORDER BY a.salary DESC) AS rank
FROM employees a
INNER JOIN departments b ON a.department_id = b.id;

এই কুয়েরি, employees টেবিলের ডেটাকে departments টেবিলের সাথে যুক্ত করে, স্যালারি অনুযায়ী কর্মচারীদের র‍্যাঙ্ক প্রদান করবে।

Dense Rank() উদাহরণ

SELECT 
    id, 
    name, 
    salary, 
    DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dense_rank
FROM employees;

এখানে, আমরা department অনুযায়ী salary এর ভিত্তিতে DENSE_RANK() প্রদান করছি, যেখানে একই বিভাগের কর্মচারীরা একই র‍্যাঙ্ক পাবে।

উপসংহার


Hive-এ Rank(), Dense Rank(), এবং Row Number() ফাংশনগুলো অত্যন্ত কার্যকরী ডেটা বিশ্লেষণের জন্য। এগুলোর সাহায্যে আপনি ডেটাকে সঠিকভাবে র‍্যাঙ্কিং বা নম্বরিং করতে পারেন এবং ডেটা পার্টিশনিংয়ের মাধ্যমে আরও উন্নত বিশ্লেষণ করতে পারেন। Rank() এবং Dense Rank() র‍্যাঙ্কিংয়ের জন্য ব্যবহৃত হয়, যেখানে Row Number() প্রতিটি রেকর্ডের জন্য ইউনিক নম্বর প্রদান করে, যা অনেক কার্যকরী বিশ্লেষণ এবং রিপোর্টিংয়ের জন্য উপকারী।

Content added By
Promotion

Are you sure to start over?

Loading...